<?php
/*
 File:                  DisputesController.php
 Author:                A. Krug
 Date:                  22.11.2010
 Revision:
 To do:                 -
 Purpose:               Plugin: mit predispatch - funktion, die aufgerufen wird, sobald in der Bootstrap initialisiert. 
                        kuemmert sich um die zugangsberechtigung zur applikation
 Requirements:          Zugriff auf DB
*/
class Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract {
    
    private $_acl = null;
    private $_auth = null;
    
    public function __construct(Zend_Acl $acl, Zend_Auth $auth) {
        $this->_acl = $acl;
        $this->_auth = $auth;
    }
    
    public function preDispatch(Zend_Controller_Request_Abstract $request){
        $module     = strtolower($request->getModuleName());
        $controller = strtolower($request->getControllerName());
        $resource   = strtolower($module.':'.$controller);
        $privilege  = strtolower($request->getActionName());

        //je nach modul wird ein anderes namespace fuer die authentication verwendet
        $this->_auth->setStorage(new Zend_Auth_Storage_Session($module));//namespace wird immer so benannt wie das modul
        $identity = $this->_auth->getStorage()->read();

        $role = null;
        if($this->_auth->hasIdentity()){
            $role = $identity->role;
        }

        //in diesen faellen hat der user die rechte eines null users
//        if(isset($identity->locked) && $identity->locked == 1
//        || isset($identity->deleted) && $identity->deleted == 1
//        || isset($identity->registered) && !$identity->registered){
//            $role = null;
//        }

        if (!$this->_acl->isAllowed($role, $resource, $privilege)){

            switch($module){
                case 'default':
                    $controller = 'index';
                    $action     = 'index';
                    break;
                case 'backend':
                    $controller = 'authentication';
                    $action     = 'login';
                    break;
                default:
                    $controller = 'index';
                    $action     = 'index';
                    break;
            }
            $request->setModuleName($module)->setControllerName($controller)->setActionName($action);
        }else{
            //$request->setModuleName($module)->setControllerName('index')->setActionName('index');
        } 

    }
}